package main

import "fmt"

// 不加长度 是slice
func updateSlice(s []int) {
	s[0] = 100
}

func main() {
	// testSlice()

	// expandSlice()

	appendSlice()
}

/**
append 超过数组长度时,view 的就是新的数组
s4 s5 no longer view arr
*/
func appendSlice() {
	arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	s1 := arr[2:6] // 2345
	s2 := s1[3:5]  // 56  越界依然能取到
	fmt.Println(s1, s2)
	// 5,6
	s3 := append(s2, 8)
	s4 := append(s3, 9)
	s5 := append(s4, 10)
	// s4  s5 view different array
	fmt.Println(s3, s4, s5)
	fmt.Println(arr)
}

func expandSlice() {
	arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	s1 := arr[2:6]
	fmt.Printf("s1=%v,len(s1)=%d,cap(s1)=%d", s1, len(s1), cap(s1))
	// 2,3,4,5 | 4 | 6
	fmt.Println()
	s2 := s1[3:5]
	fmt.Printf("s2=%v,len(s2)=%d,cap(s2)=%d", s2, len(s2), cap(s2))
	// 5,6 | 2 | 3
}

func testSlice() {
	arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Println("arr[2:6] =", arr[2:6])
	// 左闭右开
	fmt.Println("arr[:6] =", arr[:6])
	s1 := arr[2:]
	fmt.Println("arr[2:] =", s1)
	s2 := arr[:]
	fmt.Println("arr[:] =", s2)
	// 全部
	updateSlice(s1)
	fmt.Println(s1)
	fmt.Println(arr)
}
